﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using SGAEntidades;
using SGABDUtil;
using SGAInterfaces;

namespace SGAAccesoDatos
{
    public class PolizaSeguroDetalle : IPolizaSeguroDetalle
    {
        #region Miembros de IPolizaSeguroDetalle

        public bool Registrar(PolizaSeguroDetalleInfo oPolizaDetalle, SqlTransaction trx)
        {
            var bExito = false;
            var sqlParm = new SqlParameter[9];

            try
            {
                sqlParm[0] = new SqlParameter("@Nro_Poliza", SqlDbType.VarChar);
                if (oPolizaDetalle.NroPoliza != null)
                    sqlParm[0].Value = oPolizaDetalle.NroPoliza;
                else
                    sqlParm[0].Value = DBNull.Value;


                sqlParm[1] = new SqlParameter("@Id_Tipo_Seguro", SqlDbType.VarChar);
                if (oPolizaDetalle.IdTipoSeguro != null)
                    sqlParm[1].Value = oPolizaDetalle.IdTipoSeguro;
                else
                    sqlParm[1].Value = DBNull.Value;

                sqlParm[2] = new SqlParameter("@Ruc_Proveedor", SqlDbType.VarChar);
                if (oPolizaDetalle.RucProveedor != null)
                    sqlParm[2].Value = oPolizaDetalle.RucProveedor;
                else
                    sqlParm[2].Value = DBNull.Value;

                sqlParm[3] = new SqlParameter("@Item", SqlDbType.Int);
                if (oPolizaDetalle.Item.HasValue)
                    sqlParm[3].Value = oPolizaDetalle.Item;
                else
                    sqlParm[3].Value = DBNull.Value;

                sqlParm[4] = new SqlParameter("@Id_Tipo_Bien_Asegurado", SqlDbType.VarChar);
                if (oPolizaDetalle.IdTipoBienAsegurado != null)
                    sqlParm[4].Value = oPolizaDetalle.IdTipoBienAsegurado;
                else
                    sqlParm[4].Value = DBNull.Value;

                sqlParm[5] = new SqlParameter("@Descripcion", SqlDbType.VarChar);
                if (oPolizaDetalle.Descripcion != null)
                    sqlParm[5].Value = oPolizaDetalle.Descripcion;
                else
                    sqlParm[5].Value = DBNull.Value;

                sqlParm[6] = new SqlParameter("@Fecha_Inclusion", SqlDbType.DateTime);
                if (oPolizaDetalle.FechaInclusion.HasValue)
                    sqlParm[6].Value = oPolizaDetalle.FechaInclusion;
                else
                    sqlParm[6].Value = DBNull.Value;

                sqlParm[7] = new SqlParameter("@Valor_Bien", SqlDbType.Decimal);
                if (oPolizaDetalle.ValorBien.HasValue)
                    sqlParm[7].Value = oPolizaDetalle.ValorBien;
                else
                    sqlParm[7].Value = DBNull.Value;

                sqlParm[8] = new SqlParameter("@Usuario_Sistema", SqlDbType.VarChar);
                if (oPolizaDetalle.IdUsuarioSistema != null)
                    sqlParm[8].Value = oPolizaDetalle.IdUsuarioSistema;
                else
                    sqlParm[8].Value = DBNull.Value;

                SqlHelper.ExecuteNonQuery(trx, CommandType.StoredProcedure, "SGA_SP_REGISTRAR_POLIZA_SEGURO_DETALLE", sqlParm);
                bExito = true;
            }
            catch (Exception)
            {
                trx.Rollback();
            }
            return bExito;
        }

        public IList<PolizaSeguroDetalleInfo> Listar(PolizaSeguroDetalleInfo oPolizaDetalle)
        {
            var sqlParm = new SqlParameter[3];
            var oListaDetalle = new List<PolizaSeguroDetalleInfo>();

            sqlParm[0] = new SqlParameter("@Nro_Poliza", SqlDbType.VarChar);
            if (oPolizaDetalle.NroPoliza != null)
                sqlParm[0].Value = oPolizaDetalle.NroPoliza;
            else
                sqlParm[0].Value = DBNull.Value;

            sqlParm[1] = new SqlParameter("@Id_Tipo_Seguro", SqlDbType.VarChar);
            if (oPolizaDetalle.IdTipoSeguro != null)
                sqlParm[1].Value = oPolizaDetalle.IdTipoSeguro;
            else
                sqlParm[1].Value = DBNull.Value;

            sqlParm[2] = new SqlParameter("@Ruc_Proveedor", SqlDbType.VarChar);
            if (oPolizaDetalle.RucProveedor != null)
                sqlParm[2].Value = oPolizaDetalle.RucProveedor;
            else
                sqlParm[2].Value = DBNull.Value;

            using (var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction, CommandType.StoredProcedure, "SGA_SP_CONSULTAR_POLIZA_SEGURO_DETALLE", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaDetalle.Add(new PolizaSeguroDetalleInfo(drd.GetString(0).Trim(), drd.GetString(1).Trim(), drd.GetString(2).Trim(),
                                Int32.Parse(drd.GetValue(3).ToString()), drd.GetString(4).Trim(), new TipoBienAseguradoInfo(drd.GetString(4).Trim(), drd.GetString(5).Trim()),
                                drd.GetString(6).Trim(), drd.GetDateTime(7), Double.Parse(drd.GetValue(8).ToString()), null));
                        }
                    }
                }
            }
            return oListaDetalle;
        }

        #endregion
    }
}
